#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	int fd1[2];
	// 创建无名管道
	if(pipe(fd1) == -1)
	{
		perror("pipe error\n");
		return -1;
	}
	int fd2[2];
	// 创建无名管道
	if(pipe(fd2) == -1)
	{
		perror("pipe error\n");
		return -1;
	}
	char w_buf[1024] = {0};
	char r_buf[1024] = {0};
	// 创建子进程
	pid_t son = fork();
	if(son > 0)
	{
		// 关闭fd1的读端, fd2的写端
		close(fd1[0]);
		close(fd2[1]);
		// 父进程准备向管道中写入数据
		while(1)
		{
			memset(w_buf, 0, 1024);
			memset(r_buf, 0, 1024);
			printf("请输入发送给子进程的数据\n");
			scanf("%s", w_buf);
			// 把数据写入写端
			write(fd1[1], w_buf, strlen(w_buf));
			
			// 准备读取数据
			read(fd2[0], r_buf, 1024);
			printf("当前父进程收到的数据=%s\n", r_buf);
		}
		// 等待子进程的退出
		wait(NULL);
	}
	else if(son == 0)
	{
		// 关闭fd2的读端, fd1的写端
		close(fd1[1]);
		close(fd2[0]);
		while(1)
		{
			memset(w_buf, 0, 1024);
			memset(r_buf, 0, 1024);
			// 准备读取数据
			read(fd1[0], r_buf, 1024);
			printf("当前子进程收到的数据=%s\n", r_buf);

			printf("请输入发送给父进程的数据\n");
			scanf("%s", w_buf);
			// 把数据写入写端
			write(fd2[1], w_buf, strlen(w_buf));
		}
		close(fd1[0]);
		close(fd2[1]);
	}

	

	return 0;
}
